#pragma once

#include<pthread.h>
#include<iostream>
#include"Mutex.hpp"

 namespace CondModule
 {
	using namespace LockModule;

	class Cond
	{
	public:
		Cond()
		{
			int n = ::pthread_cond_init(&_cond,nullptr);
			(void)n;
		}

		void Wait(Mutex &mutex)
		{
			int n = ::pthread_cond_wait(&_cond,mutex.LockPtr());
		}

		void Noticy()
		{
			 int n = ::pthread_cond_signal(&_cond);
			 (void)n;
		}
		void NoticyAll()
		{
			int n = ::pthread_cond_broadcast(&_cond);
			(void)n;
		}
		~Cond()
		{
			int n = ::pthread_cond_destroy(&_cond);
			(void)n;
		}

	private:
		pthread_cond_t _cond;
	};
 }